﻿#include <iostream>
#include <string>
using namespace std;
/* 对象结构型模式
1.意图
为子系统中的一组接口提供一个一致的界面，Facade模式定义了一个高层接口，这个接口使得这一子系统更加容易使用
2.适用性
a.当你要为一个复杂子系统提供一个简单接口时
b.客户程序与抽象类的实现部分之间存在着很大的依赖性。引入Facade将这个子系统与客户以及其他子系统分离，可以提高子系统的独立
性和可移植性
c.当你需要构建一个层次结构的子系统时，使用Facade模式定义子系统中每层的入口点。如果子系统之间是相互依赖的，你可以让它们仅
通过Facade进行通讯，从而简化了它们之间的依赖关系。
*/
class CSyntaxParse
{
public:
	void SyntaxParse()
	{
		cout << "语法分析中..." << endl;
	}
};
class CMiddCode
{
public:
	void MidCode()
	{
		cout << "中间代码生成中..." << endl;
	}
};
class CLinkSystem
{
public:
	void LinkSystem()
	{
		cout << "链接中..." << endl;
	}
};
class Facade
{
public:
	void Show()
	{
		CSyntaxParse syn;
		CMiddCode mid;
		CLinkSystem link;
		syn.SyntaxParse();
		mid.MidCode();
		link.LinkSystem();
		cout << "程序运行中..." << endl;
	}
};
/*
int main()
{
	Facade facade;
	facade.Show();
	return 0;
}
*/